// Appendix
set scheme plottig // setting graphical scheme

********************************************************************************
****** Pretest *****************************************************************
********************************************************************************

import delimited "pretest1.csv", clear varname(1)

**** Figure A1
// Comparison of different types of violations
* binarize variables to acceptable range
gen electB = elect==4 | elect==5 | elect==3
gen spyB = spy==4 | spy==5 | spy==3
gen hrB = hr==4 | hr==5 | hr==3

mean electB
	estimates store electB
mean spyB
	estimates store spyB
mean hrB
	estimates store hrB
	
coefplot electB spyB hrB, vertical recast(bar) color(538b*.8) barwidth(.65) ///
	 xlabel(.75 "Election Interference" 2 "Espionage" 3.25 "Human Rights") ///
	 format(%9.1f) rescale(100) ytitle("US Foreign Intervention (% Acceptable)")  ///
	 xtitle("Situation for U.S. Foreign Intervention", height(5)) ///
	 ciopts(recast(rcap) lcolor(black)) citop legend(off) ///
	 addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(1) mlabcolor(black)) 

*** Figure A2
// country favorability measurements
/*
ccode1_1 iran
ccode1_2 germany
ccode1_3 uk
ccode1_4 china
ccode1_5 turkey
ccode2_1 saudi
ccode2_2 russia
ccode2_3 france
ccode2_4 norway
ccode2_5 india
*/

mean ccode1_1
	estimates store iran
mean ccode1_2
	estimates store ger
mean ccode1_3
	estimates store uk
mean ccode1_4
	estimates store china
mean ccode1_5
	estimates store tur
mean ccode2_1
	estimates store saudi
mean ccode2_2
	estimates store rus
mean ccode2_3
	estimates store fra
mean ccode2_4
	estimates store nor
mean ccode2_5
	estimates store india
	
coefplot (iran, col(538r*.8)) (china, col(538r*.8)) (saudi, col(538r*.8)) ///
		 (rus, col(538r*.8)) (india, col(538o*.8)) (tur, col(538o*.8)) ///
		 (fra, col(538b*.8)) (ger, col(538b*.8)) (uk, col(538b*.8)) ///
		 (nor, col(538b*.8)), vertical recast(bar) barwidth(.65) ///
	 xlabel(1 "Iran" 2 "China" 3 `""Saudi" "Arabia""' 4 "Russia" ///
			5 "India" 6 "Turkey" 7 "France" 8 "Germany" ///
			9 `""United" "Kingdom""' 10 "Norway") ///
	 format(%9.2f) ytitle("Mean Favorability")  ///
	 xtitle("Country", height(2)) ///
	 ciopts(recast(rcap) lcolor(black)) citop ///
	 legend(order(1 "Unfavorable" 9 "Neutral" 13 "Favorable") pos(6) rows(1)) ///
	 addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(1) mlabcolor(black))	
	

*** Figure A3	
global x1 i.whataboutism i.violation i.country i.domestic // setup controls

// run regression 
quietly reg equal $x1, cluster(id)
	estimates store equal
quietly reg just $x1, cluster(id)
	estimates store just

quietly reg equal $x1, cluster(id)
	estimates store equal
quietly reg just $x1, cluster(id)
	estimates store just
	
coefplot equal, bylabel("No moral equivalence between US and others") || ///
		 just, bylabel("US criticism is justified") xline(0) drop(_cons) base ///
		 ciopts(recast(rcap)) xtitle("Respondent Agreement") ///
		 headings(1.whataboutism = "{bf:Whataboutism Type}" ///
                  1.violation = "{bf:Violation Type}"      ///
                  1.country = "{bf:Country}"				///
				  0.domestic = "{bf:Whataboutism Actor}") 		///
		 coeflabels(1.whataboutism = "Recent"    			///
					2.whataboutism = "Past"					///
					3.whataboutism = "Unrelated"			///
					0.domestic = "International"	    ///
					1.domestic = "Domestic"			///
					1.violation = "Spy on US"    		///
					2.violation = "Spy on ally"    		///
					3.violation = "Human rights"   	///
					4.violation = "Election interference" ///
					1.country = "China"    		///
					2.country = "France"    		///
					3.country = "Germany"   	///
					4.country = "Iran"	///
					5.country = "Russia"	///
					6.country = "Saudi Arabia"	///
					7.country = "Turkey") 
	
	
*** Figure A4: Comparison of Instrument Similarity (Pretest 2)

import delimited "pretest2.csv", clear varname(1)
set scheme plottig // set graphical scheme to plottig

mean electr 
	estimates store electr
mean electp
	estimates store electp
mean elect_tor
	estimates store elect_tor
mean elect_coup
	estimates store elect_coup
	
coefplot electr electp elect_tor elect_coup, vertical recast(bar) ///
	     ciopts(recast(rcap) color(black)) citop barwidth(.75) ///
		 color(538b*.8) legend(off) format(%9.2f) ///
		 xtitle("Type of US Government Action", height(5)) ///
		 xlabel(.7 `""Recent:" "Post Cold War""' 1.9 `""Past:" "1960s-1970s""' ///
		 3.15 `""Unrelated:" "Torture""' 4.3 `""Unrelated:" "Coup""') ///
		 ytitle("Mean Similarity (7-pt scale)") ///
		 title("(a) Potential Election Instruments") ///
		 name("elect", replace) ///
		 addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(1) mlabcolor(black)) 
		 

mean refugeer
	estimates store refugeer
mean refugeepast1
	estimates store refugeepast1
mean refugeepast2
	estimates store refugeepast2
mean refugee_tor
	estimates store refugee_tor
mean refugee_coup
	estimates store refugee_coup

coefplot refugeer refugeepast1 refugeepast2 refugee_tor refugee_coup, ///
		 vertical recast(bar) ciopts(recast(rcap) color(black)) citop ///
		 color(538b*.8) legend(off) format(%9.2f) barwidth(.75) ///
		 xtitle("Type of US Government Action", height(5)) ///
		 xlabel(.7 `""Recent:" "US Refugee" "Abuse""' 1.9 `""Past: Japanese" "Internment""' ///
		 3 `""Past:" "Jewish" "Deportation""' 4.2 `""Unrelated:" "Torture""' ///
		 5.35 `""Unrelated:" "Coup""') ///
		 ytitle("Mean Similarity (7-pt scale)") ///
		 title("(b) Potential Refugee Instruments") ///
		 name("refugee", replace) ///
		 addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(1) mlabcolor(black)) 

graph combine elect refugee, xsize(7) ysize(4) scale(1.25) 
		
** Figure A5: Refugee Scenario Check (Pretest 2)		
		
prop hr
estimates store hr

coefplot hr, vertical recast(bar) ciopts(recast(rcap) color(black)) citop	///
			  color(538b*.8) barwidth(.65) format(%9.1f)  ///
		 addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(1) mlabcolor(black)) /// 
			  xlabel(1 "Yes" 2 "No" 3 "Uncertain") ///
			  rescale(100) ytitle("Percentage of Responses") ///
			  xtitle("Is treatment of refugees a human rights violation?") 
			  
*** Figure A6: Length of Past Instrument (Pretest 2)
			  
split past, parse(,)	// splitting past variable
destring past*, replace

gen past1930 = past1==1 | past2==1 | past3==1  | past4==1 | past5==1 ///
		      | past6==1  | past7==1  | past8==1  | past9==1
gen past1940 = past1==2 | past2==2 | past3==2  | past4==2 | past5==2 ///
		      | past6==2  | past7==2  | past8==2  | past9==2
gen past1950 = past1==3 | past2==3 | past3==3  | past4==3 | past5==3 ///
		      | past6==3  | past7==3  | past8==3  | past9==3
gen past1960 = past1==4 | past2==4 | past3==4  | past4==4 | past5==4 ///
		      | past6==4  | past7==4  | past8==4  | past9==4
gen past1970 = past1==5 | past2==5 | past3==5  | past4==5 | past5==5 ///
		      | past6==5  | past7==5  | past8==5  | past9==5
gen past1980 = past1==6 | past2==6 | past3==6  | past4==6 | past5==6 ///
		      | past6==6  | past7==6  | past8==6  | past9==6
gen past1990 = past1==7 | past2==7 | past3==7  | past4==7 | past5==7 ///
		      | past6==7  | past7==7  | past8==7  | past9==7
gen past2000 = past1==8 | past2==8 | past3==8  | past4==8 | past5==8 ///
		      | past6==8  | past7==8  | past8==8  | past9==8			  
gen past2010 = past1==9 | past2==9 | past3==9  | past4==9 | past5==9 ///
		      | past6==9  | past7==9  | past8==9  | past9==9			  			  

mean past1930
	estimates store past1
mean past1940
	estimates store past2
mean past1950
	estimates store past3
mean past1960
	estimates store past4
mean past1970
	estimates store past5
mean past1980
	estimates store past6
mean past1990
	estimates store past7
mean past2000
	estimates store past8
mean past2010
	estimates store past9

	
coefplot past1 past2 past3 past4 past5 past6 past7 past8 past9, ///
		 vertical recast(bar) ciopts(recast(rcap) color(black)) citop ///
		 color(538b*.8) legend(off) rescale(100) ///
		 xlabel(.6 "1930s" 1.7 "1940s" 2.8 "1950s" 4 "1960s" ///
		 5.05 "1970s" 6.1 "1980s" 7.2 "1990s" 8.4 "2000s" 9.5 "Last decade") ///
		 ytitle("Respondents Who Say Still Recent (%)")  format(%9.0f) ///
		 addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(1) mlabcolor(black)) ///
		 xtitle("Timing of past US election interference")


********************************************************************************
*** Survey Sample Demographics and Balance *************************************
********************************************************************************

// Tables A1 to A3

	* Table A1
import delimited "main.csv", clear varname(1)

quietly tabout female age education race1 using "tableA1.csv", ///
	    ptotal(none) oneway cells(col) clab(Main) style(csv) format(2) replace

	   import delimited "followup.csv", clear varname(1)

quietly tabout female age education race using "tableA1.csv", ///
		ptotal(none) oneway cells(col) clab(Main) style(csv) format(2) append

// Treatment Balance by Survey Sample Characteristics
		
	* Table A2
/* Note: Ignore last column as that displays pooled sample for category */
import delimited "main.csv", clear varname(1)
	
quietly tabout female age education what using "tableA2.csv" if country==1, ///
	    ptotal(none) cells(col) style(csv) format(2) h1(Russia) ///
        h2(| No Comment | Denial | Unrelated | Past | Recent) replace	      
quietly tabout female age education what using "tableA2.csv" if country==2, ///
	    ptotal(none) cells(col) style(csv) format(2) h1(Germany) ///
        h2(| No Comment | Denial | Unrelated | Past | Recent) append		 
quietly tabout female age education what using "tableA2.csv" if country==3, ///
	    ptotal(none) cells(col) style(csv) format(2) h1(Turkey) ///
        h2(| No Comment | Denial | Unrelated | Past | Recent) append		 

	* Table A2
/* Note: Ignore last column as that displays pooled sample for category */
import delimited "followup.csv", clear varname(1)

quietly tabout female age education what using "tableA3.csv" if ccode==1, ///
	    ptotal(none) cells(col) style(csv) format(2) h1(Russia) ///
        h2(| No Comment | Denial | Recent | Dismissal | Context | Admission) replace	   	   
quietly tabout female age education what using "tableA3.csv" if ccode==2, ///
	    ptotal(none) cells(col) style(csv) format(2) h1(Germany) ///
        h2(| No Comment | Denial | Recent | Dismissal | Context | Admission) append		 
quietly tabout female age education what using "tableA3.csv" if ccode==3, ///
	    ptotal(none) cells(col) style(csv) format(2) h1(Turkey) ///
        h2(| No Comment | Denial | Recent | Dismissal | Context | Admission) append		 
	   

********************************************************************************
*** Power Tests	****************************************************************
********************************************************************************
*Locate sample means for determination of power test at power level of .80
import delimited "main.csv", clear varname(1)
sum appb if what==1 & country==1
** mean = .602 sd = .490
sum appb if what==2 & country==1
** mean = .571 sd = .496
sum appb if what==5 & country==1
** mean = .393 sd = .489

sum pun2b if what==1 & country==1
** mean = .672 sd = .470
sum pun2b if what==2 & country==1
** mean = .608 sd = .489
sum pun2b if what==5 & country==1
** mean = .546 sd = .498

*** Figure A7: Power Tests for Sample Size Selection
*** No comment vs Others
power twomeans .602 (.393), ///
	  n(100 200 300 400 500)  sd1(.490) sd2(.489) ///
	  graph(scheme(plottig) yline(.8) ///
	  title("(a) Approval of U.S. Behavior"))
	  graph save "power1a.gph", replace 	
	  
power twomeans .672 (.546), ///
	  n(100 200 300 400 500)  sd1(.470) sd2(.498) ///
	  graph(scheme(plottig) yline(.8) ///
	  title("(b) Support for Sanctions"))
	  graph save "power1b.gph", replace 	
	  	  
** Generate Figure A7
graph combine "power1a.gph" "power1b.gph", ///
			  rows(1) ycommon xsize(8) ysize(4) scale(1.4)

	   
********************************************************************************
*** A4: Robustness Checks ******************************************************
********************************************************************************
import delimited "main.csv", clear varname(1)
set scheme plottig
gen what1 = (what-6)*(-1) // Reclassify what to use "no comment" as reference


// Figure A8: Whataboutism and Public Approval, by Issue Area and Country
reg appb i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=1) vsquish post
	estimates store app1rus
reg appb i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=2) vsquish post
	estimates store app1ger
reg appb i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=3) vsquish post
	estimates store app1tur	
reg appb i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=1) vsquish post	
	estimates store app2rus
reg appb i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=2) vsquish post	
	estimates store app2ger
reg appb i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=3) vsquish post	
	estimates store app2tur	
	
coefplot app1rus, mlabposition(2) name(rus1, replace) title("(a) Russia") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) byopts(rows(1)) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(100) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot app1ger, mlabposition(2) name(ger1, replace) title("(b) Germany") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

coefplot app1tur, mlabposition(2) name(tur1, replace) title("(c) Turkey") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<43, string(@b, "%9.0fc") + "*", cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

graph combine rus1 ger1 tur1, xcommon ycommon rows(1) ///
	  title("Election Interference Scenario", size(medium)) ///
	  b1title("Mean Approval of U.S. Behavior (%)", size(small)) name(f1, replace)
			  
coefplot app2rus, mlabposition(2) name(rus2, replace) title("(d) Russia") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(100) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot app2ger, mlabposition(2) name(ger2, replace) title("(e) Germany") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

coefplot app2tur, mlabposition(2) name(tur2, replace) title("(f) Turkey") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

graph combine rus2 ger2 tur2, xcommon ycommon rows(1) ///
	  b1title("Mean Approval of U.S. Behavior (%)", size(small)) ///
	  title("Refugee Crisis Scenario", size(medium)) name(f2, replace)

graph combine f1 f2, xcommon ycommon rows(2) scale(1.25) ///
	  l1("Responses by the Target of Criticism", size(small))
	
// Figure A9: Whataboutism and Economic Sanctions, by Issue Area and Country	

quietly reg pun2b i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=1) vsquish post
	estimates store pun2rus1
quietly reg pun2b i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=2) vsquish post
	estimates store pun2ger1
quietly reg pun2b i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=3) vsquish post
	estimates store pun2tur1	
quietly reg pun2b i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=1) vsquish post	
	estimates store pun2rus2
quietly reg pun2b i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=2) vsquish post	
	estimates store pun2ger2
quietly reg pun2b i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=3) vsquish post	
	estimates store pun2tur2	
	
coefplot pun2rus1, mlabposition(2) name(rus1, replace) title("(a) Russia") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) byopts(rows(1)) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(100) ///
		 mlabel(cond(@b<60, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun2ger1, mlabposition(2) name(ger1, replace) title("(b) Germany") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<35, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

coefplot pun2tur1, mlabposition(2) name(tur1, replace) title("(c) Turkey") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<43, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

graph combine rus1 ger1 tur1, xcommon ycommon rows(1) ///
	  title("Election Interference Scenario", size(medium)) ///
	  b1title("Mean Support for Sanctions (%)", size(small)) name(f1, replace)
			  
coefplot pun2rus2, mlabposition(2) name(rus2, replace) title("(d) Russia") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(100) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun2ger2, mlabposition(2) name(ger2, replace) title("(e) Germany") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

coefplot pun2tur2, mlabposition(2) name(tur2, replace) title("(f) Turkey") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(70) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))				

graph combine rus2 ger2 tur2, xcommon ycommon rows(1) ///
	  b1title("Mean Support for Sanctions (%)", size(small)) ///
	  title("Refugee Crisis Scenario", size(medium)) name(f2, replace)

graph combine f1 f2, xcommon ycommon rows(2) scale(1.25) ///
	  l1("Responses by the Target of Criticism", size(small))

// Table A4: Whataboutism and Support for US Foreign Policy (LPM vs Probit)
global controls female i.age1 i.education hawk i.party 

quietly reg appb i.what $controls, cluster(id)
	estimates store approval1
quietly reg pun2b i.what $controls, cluster(id)
	estimates store punishment1
quietly probit appb i.what $controls, cluster(id)
	estimates store approval2
quietly probit pun2b i.what $controls, cluster(id)
	estimates store punishment2	
	
label variable hawk "hawkishness"
	
	
esttab approval1 punishment1 approval2 punishment2 using "TableA4.csv", ///
	   se(%8.2f) obslast replace nogaps r2 pr2 long ///
	   nobaselevels b(%8.2f) label  star(* 0.05 ** 0.01 *** 0.001) ///
	   mtitles("Approval" "Sanctions" "Approval" "Sanctions")

// Table A5: Whataboutism and Support for US Foreign Policy, by Country
global controls female i.age1 i.education hawk i.party

	* Approval
quietly reg appb i.what $controls if country==1, cluster(id)
	estimates store app_r
quietly reg appb i.what $controls if country==2, cluster(id)
	estimates store app_g
quietly reg appb i.what $controls if country==3, cluster(id)
	estimates store app_t	
	* Sanctions
quietly reg pun2b i.what $controls if country==1, cluster(id)
	estimates store pun2_r
quietly reg pun2b i.what $controls if country==2, cluster(id)
	estimates store pun2_g
quietly reg pun2b i.what $controls if country==3, cluster(id)
	estimates store pun2_t
	
esttab app_r pun2_r app_g pun2_g app_t pun2_t	///
	   using "TableA5.csv", se(%8.2f) obslast replace nogaps r2 long ///
	   nobaselevels b(%8.2f) label  star(* 0.05 ** 0.01 *** 0.001) ///
	   mtitles("Approval" "Sanctions" "Approval" "Sanctions" ///
			   "Approval" "Sanctions")
	  
	
// FIGURE A10: MAIN EFFECTS OF WHATABOUTISM, BY SCENARIO ORDER (MAIN SURVEY)	
/* Note: what1 used on figures for presentational purposes */

quietly reg appb i.what1 i.country if order==1, cluster(id)
	margins i.what1, vsquish post
	estimates store m1
quietly reg appb i.what1 i.country if order==2, cluster(id)
	margins i.what1, vsquish post
	estimates store m2
	
quietly reg pun2b i.what1 i.country if order==1, cluster(id)
	margins i.what1, vsquish post
	estimates store m3
quietly reg pun2b i.what1 i.country if order==2, cluster(id)
	margins i.what1, vsquish post
	estimates store m4

coefplot m1 m2, mlabposition(2) mlabcol(black) name(g1, replace) ///
		 title("(a) Approval of U.S. Behavior") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Approval of U.S. Behavior (%)", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(105) ///
		 legend(order(2 "Election (First)" 4 " Refugee (First)") pos(6) rows(1)) ///				
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
		   		   
			   
coefplot m3 m4, mlabposition(2) mlabcol(black) name(g2, replace)  ///
		 title("(b) Support for Sanctions") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Support for Sanctions (%)", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(80) ///
		 legend(order(2 "Election (First)" 4 " Refugee (First)") pos(6) rows(1)) ///				
		 mlabel(cond(@b<53, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))

graph combine g1 g2, xcommon ycommon rows(1) ///
	l1title("Responses by Target of Criticism", size(small))
	
// Figure A11: Main Effects of Whataboutism, by Attention Level (Main)

quietly reg appb i.what1 if att==1, cluster(id)
	margins i.what1, vsquish post
	estimates store app
quietly reg pun2b i.what1 if att==1, cluster(id)
	margins i.what1, vsquish post
	estimates store pun2
	
coefplot app, bylabel("(a) Approval of U.S. Behavior") || ///
		 pun2, bylabel("(b) Impose Sanctions") ///
	     mlabposition(2) mlabcol(black) name(a1, replace)  ///
		 title("High Attention Level") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Support for Sanctions (%)", height(5)) rescale(100) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) ///
		 mlabel(cond(@b<53, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))

	
quietly reg appb i.what1##i.country if att==0, cluster(id)
	margins i.what1, vsquish post
	estimates store app
quietly reg pun2b i.what1##i.country if att==0, cluster(id)
	margins i.what1, vsquish post
	estimates store pun2
	
coefplot app, bylabel("(c) Approval of U.S. Behavior") || ///
		 pun2, bylabel("(d) Impose Sanctions") ///
	     mlabposition(2) mlabcol(black) name(a2, replace)  ///
		 title("Low Attention Level") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Support for Sanctions (%)", height(5)) rescale(100) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) mlabel(@b)


graph combine a1 a2, xcommon scale(1.25) xsize(6) ysize(5) rows(2) ///
	  l1title("Responses by Target of Criticism", size(small))
	  
// Figure A12: Main Effects of Whataboutism, by Country (High Attention)

quietly reg appb i.what1##i.country $controls if att==1, cluster(id)
	margins i.what1, at(country=1) vsquish post
	estimates store app_r
quietly reg appb i.what1##i.country $controls  if att==1, cluster(id)
	margins i.what1, at(country=2) vsquish post
	estimates store app_g
quietly reg appb i.what1##i.country $controls  if att==1, cluster(id)
	margins i.what1, at(country=3) vsquish post
	estimates store app_t	
quietly reg pun2b i.what1##i.country $controls  if att==1, cluster(id)
	margins i.what1, at(country=1) vsquish post
	estimates store pun2_r
quietly reg pun2b i.what1##i.country $controls  if att==1, cluster(id)
	margins i.what1, at(country=2) vsquish post
	estimates store pun2_g
quietly reg pun2b i.what1##i.country $controls  if att==1, cluster(id)
	margins i.what1, at(country=3) vsquish post
	estimates store pun2_t		
	
coefplot app_r, title("(a) Russia") ///
	     mlabposition(2) mlabcol(black) name(a1, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(105) ///
		 mlabel(cond(@b<54, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot app_g, title("(b) Germany") ///
	     mlabposition(2) mlabcol(black) name(a2, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<53, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))


coefplot app_t, title("(c) Turkey") ///
	     mlabposition(2) mlabcol(black) name(a3, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

graph combine a1 a2 a3, xcommon rows(1)	name(g1, replace) ///
	  l1title("Responses by Target of Criticism", size(small))	///		
	  b1title("Approval of U.S. Behavior (%)", size(small))			

coefplot pun2_r, title("(d) Russia") ///
	     mlabposition(2) mlabcol(black) name(a1, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(105) ///
		 mlabel(cond(@b<59, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun2_g, title("(e) Germany") ///
	     mlabposition(2) mlabcol(black) name(a2, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<45, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))


coefplot pun2_t, title("(f) Turkey") ///
	     mlabposition(2) mlabcol(black) name(a3, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

graph combine a1 a2 a3, xcommon rows(1)	name(g2, replace) ///
	  l1title("Responses by Target of Criticism", size(small))	///		
	  b1title("Support for Sanctions (%)", size(small))		
	  
graph combine g1 g2, rows(2) xcommon ycommon scale(1.25)  

// Figure A13: Whataboutism and Diplomatic Cut-off

quietly reg pun1b i.what1##i.country, cluster(id)
	margins i.what1, vsquish post
	estimates store pun_dip
	
coefplot pun_dip, ///
	     mlabposition(2) mlabcol(black) name(f1, replace)  ///
		 title("Whataboutism and Diplomatic Cut-offs") ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Support for Diplomatic Cut-off (%)", height(5)) rescale(100) ///
		 ylabel(1 "Recent Whataboutism" 2 "Past Whataboutism" ///
			    3 "Unrelated Whataboutism" 4 "Denial" 5 "No comment", ///
				labcol(black)) fysize(100) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

	  
quietly reg pun1b i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=1) vsquish post
	estimates store pun1rus1
quietly reg pun1b i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=2) vsquish post
	estimates store pun1ger1
quietly reg pun1b i.what1##i.country if issue==1, cluster(id)
	margins i.what1, at(country=3) vsquish post
	estimates store pun1tur1	
quietly reg pun1b i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=1) vsquish post	
	estimates store pun1rus2
quietly reg pun1b i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=2) vsquish post	
	estimates store pun1ger2
quietly reg pun1b i.what1##i.country if issue==2, cluster(id)
	margins i.what1, at(country=3) vsquish post	
	estimates store pun1tur2	
	
coefplot pun1rus1, title("Russia") ///
	     mlabposition(2) mlabcol(black) name(d2a, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel(1 "Recent Whataboutism" 2 "Past Whataboutism" ///
			    3 "Unrelated Whataboutism"  4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(150) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
					  
coefplot pun1ger1, title("Germany") ///
	     mlabposition(2) mlabcol(black) name(d2b, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<10, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<25, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun1tur1, title("Turkey") ///
		 mlabposition(2) mlabcol(black) name(d2c, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
				
graph combine d2a d2b d2c, xcommon ycommon rows(1) fysize(100) ///
	  b1title("Support for Diplomatic Cut-off (%)", size(small)) ///
	  title("Election Interference Scenario", size(medium)) name(f2, replace)
					  
coefplot pun1rus2, title("Russia") ///
	     mlabposition(2) mlabcol(black) name(d3a, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel(1 "Recent Whataboutism" 2 "Past Whataboutism" ///
			    3 "Unrelated Whataboutism" 4 "Denial" 5 "No comment", ///
				labcol(black)) fxsize(150) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
					  
coefplot pun1ger2, title("Germany") ///
	     mlabposition(2) mlabcol(black) name(d3b, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<10, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<25, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun1tur2, title("Turkey") ///
		 mlabposition(2) mlabcol(black) name(d3c, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
				
graph combine d3a d3b d3c, xcommon ycommon rows(1) fysize(100) ///
	  b1title("Support for Diplomatic Cut-off (%)", size(small)) ///
	  title("Refugee Crisis Scenario", size(medium)) name(f3, replace)

graph combine f1 f2 f3, rows(3) scale(1.25) ysize(7) xsize(5) ///
	  l1title("Responses by Target of Criticism", size(small))

			
********************************************************************************
****************** A5: Heterogenuous Effects ***********************************
********************************************************************************
import delimited "main.csv", clear varname(1)

gen race3=1 if race==4
	replace race3=2 if race1=="black"
	replace race3=3 if race1=="hispanic"
	replace race3=4 if race1=="white"
	replace race3=5 if missing(race3)
	
gen what1 = (what-6)*(-1) // Reclassify what to use "no comment" as reference

	
/* Defining whataboutism label */
label define whatlabel 1 "No comment" 2 "Denial" 3 "Unrelated" 4 "Past" 5 "Recent"	
label values what whatlabel

// Table A6: Heterogenuous whatment Effects (Main)
global controls female i.age1 i.college hawk i.party i.white

quietly reg appb i.what i.what#i.party $controls, cluster(id) // by partisanship
	estimates store party
quietly reg appb i.what i.what#i.female $controls, cluster(id) // by gender
	estimates store gender
quietly reg appb i.what i.what#i.white $controls, cluster(id) // by race
	estimates store race
quietly reg appb i.what i.what#i.college $controls, cluster(id) // by education
	estimates store edu
quietly reg appb i.what i.what#i.age1 $controls, cluster(id) // by age2
	estimates store age2
quietly reg appb i.what i.what#c.hawk $controls, cluster(id) // by hawkishness
	estimates store hawkish

esttab party gender race edu age2 hawkish using "TableA6.csv", ///
	   se(%8.2f) obslast replace nogaps r2 long nobaselevels b(%8.2f) label ///
	   star(* 0.05 ** 0.01 *** 0.001) ///
	   keep(2.what 3.what 4.what 5.what) ///
	   mtitles("Party ID" "Female" "White" "Education" "Age" "Hawkishness")
		 
* Figure A14: Whataboutism and Support for Punishments, by Partisanship (Main)

* Approval
reg appb i.what1##i.party##i.country, cluster(id)
	margins i.what1, at(party=1) vsquish post
	estimates store app1ind
reg appb i.what1##i.party##i.country, cluster(id)
	margins i.what1, at(party=2) vsquish post
	estimates store app1dem
reg appb i.what1##i.party##i.country, cluster(id)
	margins i.what1, at(party=3) vsquish post
	estimates store app1rep	

* Imposing Sanctions	
quietly reg pun2b i.what1##i.party i.country, cluster(id)
	margins i.what1, at(party=1) vsquish post
	estimates store ind1
quietly reg pun2b i.what1##i.party i.country, cluster(id)
	margins i.what1, at(party=2) vsquish post
	estimates store dem1
quietly reg pun2b i.what1##i.party i.country, cluster(id)
	margins i.what1, at(party=3) vsquish post
	estimates store rep1	
					  
coefplot (app1ind, color(538g) ciopts(color(538g) recast(rcap))), ///
		 title("(a) Independent") ///
		 mlabposition(2) mlabcol(black) name(p1, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(125) ///
		 ylabel(1 "Recent Whataboutism" 2 "Past Whataboutism" ///
			    3 "Unrelated Whataboutism" 4 "Denial" 5 "No comment", ///
				labcol(black)) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
	
coefplot (app1dem, color(538b) ciopts(color(538b) recast(rcap))), /// 
		 title("(b) Democrat") ///
		 mlabposition(2) mlabcol(black) name(p2, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(75) ///
		 ylabel("") ///
		 mlabel(cond(@b<55, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot (app1rep, color(538r) ciopts(color(538r) recast(rcap))), ///
		 title("(c) Republican") ///
		 mlabposition(2) mlabcol(black) name(p3, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(75) ///
		 ylabel("") ///
		 mlabel(cond(@b<42, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))			

graph combine p1 p2 p3, rows(1) ycommon  name(party1, replace) ///
	  l1title("Responses by Target of Criticism", size(small)) ///
	  b1title("Mean Approval of U.S. Behavior (%)", size(small)) ///
	  title("Approval of U.S. Behavior", size(medium))

coefplot (ind1, color(538g) ciopts(color(538g) recast(rcap))), ///
		 title("(d) Independent") ///
		 mlabposition(2) mlabcol(black) name(p4, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(125) ///
		 ylabel(1 "Recent Whataboutism" 2 "Past Whataboutism" ///
			    3 "Unrelated Whataboutism" 4 "Denial" 5 "No comment", ///
				labcol(black)) ///
		 mlabel(cond(@b<42, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
	
coefplot (dem1, color(538b) ciopts(color(538b) recast(rcap))), /// 
		 title("(e) Democrat") ///
		 mlabposition(2) mlabcol(black) name(p5, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(75) ///
		 ylabel("") ///
		 mlabel(cond(@b<60, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot (rep1, color(538r) ciopts(color(538r) recast(rcap))), ///
		 title("(f) Republican") ///
		 mlabposition(2) mlabcol(black) name(p6, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(75) ///
		 ylabel("") ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))			

graph combine p4 p5 p6, rows(1) ycommon name(party2, replace) ///
	  l1title("Responses by Target of Criticism", size(small)) ///
	  b1title("Mean Support for Sanctions (%)", size(small)) ///
	  title("Support for Sanctions", size(medium))
	  
graph combine party1 party2, rows(2) ycommon scale(1.25)
		 			  				  					  
// Hawk and Dove Effects	
* Figure A15: Whataboutism and Approval, by Hawkishness (Main)
gen dove = hawk<=.65 // generate dove variable using top quartile


quietly reg appb i.what1##i.dove, cluster(id)					  
	margins i.what1, at(dove=0) vsquish post				  
	estimates store hawk
quietly reg appb i.what1##i.dove, cluster(id)					  
	margins i.what1, at(dove=1) vsquish post				  	
	estimates store dove
	
coefplot hawk, title("(a) Hawks") ///
		 mlabposition(2) mlabcol(black) name(h1, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(150) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) ///
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))
					  
coefplot dove, title("(b) Doves") ///
		 mlabposition(2) mlabcol(black) name(h2, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(115) ///
		 ylabel("") ///
		 mlabel(cond(@b<47, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))
				
graph combine h1 h2, rows(1) ycommon xcommon ysize(4) xsize(8) ///
	  l1title("Responses by Target of Criticism", size(small)) scale(1.5) ///
	  b1title("Mean Approval of U.S. Behavior (%)", size(small))
	  
				
// Figure A16: Whataboutism and Punishments, by Hawkishness (Main)
reg pun1b i.what1##i.dove##i.country, cluster(id)					  
	margins i.what1, at(dove=0) vsquish post				  
	estimates store hawk1
reg pun1b i.what1##i.dove##i.country, cluster(id)					  
	margins i.what1, at(dove=1) vsquish post				  	
	estimates store dove1					  

reg pun2b i.what1##i.dove##i.country, cluster(id)					  
	margins i.what1, at(dove=0) vsquish post				  
	estimates store hawk2
reg pun2b i.what1##i.dove##i.country, cluster(id)					  
	margins i.what1, at(dove=1) vsquish post				  	
	estimates store dove2	
	
coefplot hawk1, title("(a) Hawks") ///
		 mlabposition(2) mlabcol(black) name(h3, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(150) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) ///
		 mlabel(cond(@b<31, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))
					  
coefplot dove1, title("(b) Doves") ///
		 mlabposition(2) mlabcol(black) name(h4, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(115) ///
		 ylabel("") ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))	   					  
					  
graph combine h3 h4, rows(1) ycommon xcommon name(f1, replace) ///
	  l1title("Responses by Target of Criticism", size(small)) ///
	  title("Diplomatic Cut-off", size(medium)) ///
	  b1title("Mean Support for Diplomatic Cut-offs (%)", size(small))
	  
coefplot hawk2, title("(c) Hawks") ///
		 mlabposition(2) mlabcol(black) name(h5, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(150) ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) ///
		 mlabel(cond(@b<63, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))
					  
coefplot dove2, title("(d) Doves") ///
		 mlabposition(2) mlabcol(black) name(h6, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") fxsize(115) ///
		 ylabel("") ///
		 mlabel(cond(@b<47, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))	   					  
					  
graph combine h5 h6, rows(1) ycommon xcommon name(f2, replace) ///
	  l1title("Responses by Target of Criticism", size(small)) ///
	  b1title("Mean Support for Imposing Sanctions (%)", size(small)) ///
	  title("Imposition of Sanctions", size(medium))
	  
graph combine f1 f2, rows(2) ycommon ysize(5) xsize(5.5) scale(1.25)

****** Figures A17 and Figure A18
quietly reg appb i.what1##i.race3 if issue==2, robust
	margins i.what1, at(race3=1) post
	estimates store asian1
quietly reg appb i.what1 if issue==2 & race3!=1, robust
	margins i.what1, post
	estimates store asian0	
quietly reg appb i.what1##i.race3 if issue==2 & country!=3, robust
	margins i.what1, at(race3=1) post
	estimates store asian1t
quietly reg appb i.what1 if issue==2 & country!=3 & race!=1, robust
	margins i.what1, post
	estimates store asian0t
	
quietly reg appb i.what1##i.race3 if issue==2, robust
	margins i.what1, at(race3=3) post
	estimates store hispanic1	
quietly reg appb i.what1 if issue==2 & race3!=3, robust
	margins i.what1, post
	estimates store hispanic0	
quietly reg appb i.what1##i.race3 if issue==2 & country!=3, robust
	margins i.what1, at(race3=3) post
	estimates store hispanic1t	
quietly reg appb i.what1 if issue==2  & country!=3 & race3!=3, robust
	margins i.what1, post
	estimates store hispanic0t		
		
// Plot Figure A17	
coefplot asian1, title("(a) Asian American Only") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(125) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 ytitle("Responses by Target of Criticism") ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) name(asian1, replace)
				
coefplot asian0, title("(b) Sample Excluding Asian Americans") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(100) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 ytitle("") ylabel("") name(asian0, replace) ///
		 mlabel(cond(@b<41, string(@b, "%9.0fc") + "*", ///
				cond(@b<48, string(@b, "%9.0fc") + "+", string(@b, "%9.0fc"))))
		 
coefplot asian1t, title("(c) Asian American Only") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(125) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 ytitle("Responses by Target of Criticism") ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) name(asian1t, replace) ///
		 mlabel(cond(@b<41, string(@b, "%9.0fc") + "*", string(@b, "%9.0fc")))
				
coefplot asian0t, title("(d) Sample Excluding Asian Americans") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(100) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 name(asian0t, replace) ///
		 mlabel(cond(@b<43, string(@b, "%9.0fc") + "*", string(@b, "%9.0fc")))
		 
graph combine asian1 asian0, scheme(plottig) name(f1, replace) ///
	  title("Full Sample", size(medsmall))

graph combine asian1t asian0t, scheme(plottig) name(f2, replace) ///
	  title("Sample Excluding Turkey", size(medsmall))

graph combine f1 f2, xsize(6) ysize(5) scheme(plottig) rows(2)
				
// Plot Figure A18				
coefplot hispanic1, title("(a) Hispanic Only") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(125) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 ytitle("Responses by Target of Criticism") ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) name(hisp1, replace)
				
coefplot hispanic0, title("(b) Sample Excluding Hispanics") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(100) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 ytitle("") ///
		 ylabel("") name(hisp0, replace) ///
		 mlabel(cond(@b<41, string(@b, "%9.0fc") + "*", ///
				cond(@b<48, string(@b, "%9.0fc") + "+", string(@b, "%9.0fc"))))

coefplot hispanic1t, title("(c) Hispanic Only") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(125) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 ytitle("Responses by Target of Criticism") ///
		 ylabel(1 `""Recent" "Whataboutism" "' 2 `""Past" "Whataboutism" "' ///
			    3 `""Unrelated" "Whataboutism" "' 4 "Denial" 5 "No comment", ///
				labcol(black)) name(hisp1t, replace) ///
		 mlabel(cond(@b<42, string(@b, "%9.0fc") + "*", string(@b, "%9.0fc")))
				
coefplot hispanic0t, title("(d) Sample Excluding Hispanics") mlabposition(2) ///
		 mlabcol(black) mlabel fxsize(100) ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Approval of U.S. Behavior (%)") rescale(100) ///
		 ytitle("") ///
		 ylabel("") name(hisp0t, replace) ///
		 mlabel(cond(@b<43, string(@b, "%9.0fc") + "*", string(@b, "%9.0fc")))
		 		 
		 
graph combine hisp1 hisp0, scheme(plottig) name(h1, replace) ///
	  title("Full Sample", size(medsmall))

graph combine hisp1t hisp0t, scheme(plottig) name(h2, replace) ///
	  title("Sample Excluding Turkey", size(medsmall))

graph combine h1 h2, xsize(6) ysize(5) scheme(plottig) rows(2)
				 
********************************************************************************
*** A6: Robust Checks (Follow-up Survey) ***************************************
********************************************************************************
import delimited "followup.csv", clear varname(1)

set scheme plottig
gen what1 = (what-7)*(-1)

label define whatlabel1 1 "No comment" 2 "Denial" 3 "Recent" 4 "Dismissal" ///
			 5 "Context" 6 "Admission"	
label values what whatlabel1
label define partylabel 1 "Independent" 2 "Democrat" 3 "Republican"
label values party partylabel


* Figure A19: Whataboutism on U.S. Policy Approval and Sanctions Support 

reg approve i.what1 i.ccode, cluster(id)
	margins i.what1, vsquish post
	estimates store m1
reg pun2 i.what1 i.ccode, cluster(id)
	margins i.what1, vsquish post
	estimates store m2
	
coefplot m1, ///
		 ciopts(recast(rcap)) mlabpos(2) format(%9.0f) ///
		 xtitle("Mean Approval of US Behavior (%)", height(5)) ///
		 rescale(100) scheme(plottig) ///
		 ytitle("") name(f1, replace) fxsize(120) ///
		 title("(a) Approval of U.S. Behavior") ///
		 ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///
		 mlabel(cond(@b<47, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))				

coefplot m2, ///
		 ciopts(recast(rcap)) mlabpos(2) format(%9.0f) ///
		 xtitle("Mean Support for Sanctions (%)", height(5)) ///
		 rescale(100) scheme(plottig) ///
		 ytitle("") name(f2, replace) fxsize(85) ///
		 title("(b) Support for Sanctions") ///
		 ylabel("") ///
		 mlabel(cond(@b<56, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", ///
				string(@b, "%9.0fc")))))				


graph combine f1 f2, rows(1) xcommon  scale(1.25) ysize(5) xsize(9) ///
	  l1title("Responses by the Target of Criticism", size(small)) 
	  
** Figure A20: Whataboutism Approval and Sanctions Support, by Country

quietly reg approve i.what1##i.ccode, cluster(id)
	margins i.what1, at(ccode=1) vsquish post	
	estimates store rus1
quietly reg approve i.what1##i.ccode, cluster(id)
	margins i.what1, at(ccode=2) vsquish post	
	estimates store ger1
quietly reg approve i.what1##i.ccode, cluster(id)
	margins i.what1, at(ccode=3) vsquish post	
	estimates store tur1

coefplot rus1, ciopts(recast(rcap)) format(%9.0f) rescale(100) ///
		 mlabposition(12) fxsize(125) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///  
			  xtitle("") title("(a) Russia") ///
			  mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				     cond(@b<20, string(@b, "%9.0fc") + "**", ///
					 cond(@b<30, string(@b, "%9.0fc") + "***", ///
					 string(@b, "%9.0fc"))))) name(rus1, replace)

coefplot ger1, ciopts(recast(rcap)) format(%9.0f) rescale(100) ///
			  mlabposition(12) fxsize(75) ///
			  ylabel("") ytitle("") ///
			  xtitle("") title("(b) Germany") ///
			  mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
					 cond(@b<20, string(@b, "%9.0fc") + "**", ///
					 cond(@b<30, string(@b, "%9.0fc") + "***", ///
					 string(@b, "%9.0fc"))))) name(ger1, replace)

coefplot tur1, ciopts(recast(rcap)) format(%9.0f) rescale(100) ///
			  mlabposition(12) fxsize(75) ///
			  ylabel("") ytitle("") ///
			  xtitle("") title("(c) Turkey") ///
			  mlabel(cond(@b<46, string(@b, "%9.0fc") + "*", ///
					 cond(@b<20, string(@b, "%9.0fc") + "**", ///
					 cond(@b<30, string(@b, "%9.0fc") + "***", ///
					 string(@b, "%9.0fc"))))) name(tur1, replace)	

graph combine rus1 ger1 tur1, rows(1) xcommon name(f1, replace) ///
	  b1title("Mean Approval of U.S. Behavior (%)", size(small)) 

quietly reg pun2 i.what1##i.ccode, cluster(id)
	margins i.what1, at(ccode=1) vsquish post	
	estimates store rus2
quietly reg pun2 i.what1##i.ccode, cluster(id)
	margins i.what1, at(ccode=2) vsquish post	
	estimates store ger2
quietly reg pun2 i.what1##i.ccode, cluster(id)
	margins i.what1, at(ccode=3) vsquish post	
	estimates store tur2

coefplot rus2, ciopts(recast(rcap)) format(%9.0f) rescale(100) ///
		      mlabposition(12) fxsize(125) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///  
			  xtitle("") title("(d) Russia") ///
			  mlabel(cond(@b<54, string(@b, "%9.0fc") + "*", ///
				     cond(@b<20, string(@b, "%9.0fc") + "**", ///
					 cond(@b<30, string(@b, "%9.0fc") + "***", ///
					 string(@b, "%9.0fc"))))) name(rus2, replace)
					 
coefplot ger2, ciopts(recast(rcap)) format(%9.0f) rescale(100) ///
			  mlabposition(12) fxsize(75) ///
			  ylabel("") ytitle("") ///
			  xtitle("") title("(e) Germany") ///
			  mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
					 cond(@b<20, string(@b, "%9.0fc") + "**", ///
					 cond(@b<30, string(@b, "%9.0fc") + "***", ///
					 string(@b, "%9.0fc"))))) name(ger2, replace)

coefplot tur2, ciopts(recast(rcap)) format(%9.0f) rescale(100) ///
			  mlabposition(12) fxsize(75) ///
			  ylabel("") ytitle("") ///
			  xtitle("") title("(f) Turkey") ///
			  mlabel(cond(@b<48, string(@b, "%9.0fc") + "*", ///
					 cond(@b<20, string(@b, "%9.0fc") + "**", ///
					 cond(@b<30, string(@b, "%9.0fc") + "***", ///
					 string(@b, "%9.0fc"))))) name(tur2, replace)	

graph combine rus2 ger2 tur2, rows(1) xcommon name(f2, replace) ///
	  b1title("Mean Support for Sanctions (%)", size(small)) 
	  

graph combine f1 f2, ycommon scale(1.25) rows(2) xsize(8) ysize(6.5) ///
	  l1title("Responses by the Target of Criticism", size(small))

// Table A7: Whataboutism and Public Support for US Foreign Policy, LPM vs. Probit
global controls female i.age1 i.educ hawk i.party 

quietly reg approve i.what $controls, cluster(id)
	estimates store approval1
quietly reg pun2 i.what $controls, cluster(id)
	estimates store punishment1
quietly probit approve i.what $controls, cluster(id)
	estimates store approval2
quietly probit pun2 i.what $controls, cluster(id)
	estimates store punishment2	
	
label variable hawkish "hawkishness"
	

// generate Table A7
esttab approval1 punishment1 approval2 punishment2 using "TableA7.csv", ///
	   se(%8.2f) obslast replace nogaps r2 pr2 long ///
	   nobaselevels b(%8.2f) label  star(* 0.05 ** 0.01 *** 0.001) ///
	   mtitles("Approval" "Sanctions" "Approval" "Sanctions")


// Table A8: Whataboutism and Public Support for US Foreign Policy
	* Approval
quietly reg approve i.what $controls if ccode==1, cluster(id)
	estimates store app_r
quietly reg approve i.what $controls if ccode==2, cluster(id)
	estimates store app_g
quietly reg approve i.what $controls if ccode==3, cluster(id)
	estimates store app_t	
	* Sanctions
quietly reg pun2 i.what $controls if ccode==1, cluster(id)
	estimates store pun2_r
quietly reg pun2 i.what $controls if ccode==2, cluster(id)
	estimates store pun2_g
quietly reg pun2 i.what $controls if ccode==3, cluster(id)
	estimates store pun2_t
	
esttab app_r pun2_r app_g pun2_g app_t pun2_t	///
	   using "TableA8.csv", se(%8.2f) obslast replace nogaps r2 long ///
	   nobaselevels b(%8.2f) label  star(* 0.05 ** 0.01 *** 0.001) ///
	   mtitles("Approval" "Sanctions" "Approval" "Sanctions" ///
			   "Approval" "Sanctions")
			   

// FIGURE A21: MAIN EFFECTS OF WHATABOUTISM, BY SCENARIO ORDER (Follow-up Survey)

quietly reg approve i.what1 i.ccode if order==1, cluster(id)
	margins i.what1, vsquish post
	estimates store m1
quietly reg approve i.what1 i.ccode if order==2, cluster(id)
	margins i.what1, vsquish post
	estimates store m2
	
quietly reg pun2 i.what1 i.ccode if order==1, cluster(id)
	margins i.what1, vsquish post
	estimates store m3
quietly reg pun2 i.what1 i.ccode if order==2, cluster(id)
	margins i.what1, vsquish post
	estimates store m4


coefplot m1 m2, mlabposition(2) mlabcol(black) name(g1, replace) ///
		 title("(a) Approval of U.S. Behavior") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Approval of U.S. Behavior (%)", height(5)) rescale(100) byopts(rows(1)) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///  
				fxsize(105) ///
		 legend(order(2 "Election (First)" 4 " Refugee (First)") pos(6) rows(1)) ///				
		 mlabel(cond(@b<50, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
		   		   
			   
coefplot m3 m4, mlabposition(2) mlabcol(black) name(g2, replace)  ///
		 title("(b) Support for Sanctions") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Support for Sanctions (%)", height(5)) rescale(100) byopts(rows(1)) ///
		 ylabel("") fxsize(80) ///
		 legend(order(2 "Election (First)" 4 " Refugee (First)") pos(6) rows(1)) ///				
		 mlabel(cond(@b<54, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

graph combine g1 g2, xcommon ycommon rows(1) scale(1.25) ///
	l1title("Responses by Target of Criticism", size(small))

// Figure A22: Main Effects of whataboutism, by Attention Level (Followup)

quietly reg approve i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, vsquish post
	estimates store app
quietly reg pun2 i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, vsquish post
	estimates store pun2
		
coefplot app, bylabel("(a) Approval of U.S. Behavior") || ///
		 pun2, bylabel("(b) Impose Sanctions") ///
	     mlabposition(2) mlabcol(black) name(a1, replace)  ///
		 title("High Attention Level") ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Support for Sanctions (%)", height(5)) rescale(100) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///  
		 mlabel(cond(@b<55, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

	
quietly reg approve i.what1##i.ccode if att==0, cluster(id)
	margins i.what1, vsquish post
	estimates store app
quietly reg pun2 i.what1##i.ccode if att==0, cluster(id)
	margins i.what1, vsquish post
	estimates store pun2
	
coefplot app, bylabel("(c) Approval of U.S. Behavior") || ///
		 pun2, bylabel("(d) Impose Sanctions") ///
	     mlabposition(2) mlabcol(black) name(a2, replace)  ///
		 title("Low Attention Level") mlabel(@b) ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("Mean Support for Sanctions (%)", height(5)) rescale(100) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) 				
				
graph combine a1 a2, xcommon scale(1.20) xsize(6) ysize(7) rows(2) ///
	  l1title("Responses by Target of Criticism", size(small))

// Figure A23: Main Effects of whataboutism, by ccode (High Attention & Followup)

quietly reg approve i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, at(ccode=1) vsquish post
	estimates store app_r
quietly reg approve i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, at(ccode=2) vsquish post
	estimates store app_g
quietly reg approve i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, at(ccode=3) vsquish post
	estimates store app_t	
quietly reg pun2 i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, at(ccode=1) vsquish post
	estimates store pun2_r
quietly reg pun2 i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, at(ccode=2) vsquish post
	estimates store pun2_g
quietly reg pun2 i.what1##i.ccode if att==1, cluster(id)
	margins i.what1, at(ccode=3) vsquish post
	estimates store pun2_t		
	
coefplot app_r, title("(a) Russia") ///
	     mlabposition(2) mlabcol(black) name(a1, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///
				fxsize(105) ///
		 mlabel(cond(@b<54, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot app_g, title("(b) Germany") ///
	     mlabposition(2) mlabcol(black) name(a2, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<53, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))


coefplot app_t, title("(c) Turkey") ///
	     mlabposition(2) mlabcol(black) name(a3, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<44, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

graph combine a1 a2 a3, xcommon rows(1)	name(g1, replace) ///
	  l1title("Responses by Target of Criticism", size(small))	///		
	  b1title("Approval of U.S. Behavior (%)", size(small))			

coefplot pun2_r, title("(d) Russia") ///
	     mlabposition(2) mlabcol(black) name(a1, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///
		 fxsize(105) ///
		 mlabel(cond(@b<59, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun2_g, title("(e) Germany") ///
	     mlabposition(2) mlabcol(black) name(a2, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("", height(5)) rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<48, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun2_t, title("(f) Turkey") ///
	     mlabposition(2) mlabcol(black) name(a3, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) ytitle("") scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ylabel("") fxsize(75) ///
		 mlabel(cond(@b<47, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

graph combine a1 a2 a3, xcommon rows(1)	name(g2, replace) ///
	  l1title("Responses by Target of Criticism", size(small))	///		
	  b1title("Support for Sanctions (%)", size(small))		
	  
graph combine g1 g2, rows(2) xcommon ycommon scale(1.25)  		  

// Figure A24: Whataboutism and Diplomatic Cut-off
quietly reg pun2 i.what1, cluster(id)
	margins i.what1, vsquish post
	estimates store pun_dip
	
coefplot pun_dip, ///
	     mlabposition(2) mlabcol(black) name(f1, replace)  ///
		 title("Whataboutism and Diplomatic Cut-offs") ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("Support for Diplomatic Cut-off (%)", height(5)) rescale(100) ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///
		 fysize(100) ///
		 mlabel(cond(@b<54, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
  
quietly reg pun2 i.what1##i.ccode if issue==1, cluster(id)
	margins i.what1, at(ccode=1) vsquish post
	estimates store pun1rus1
quietly reg pun2 i.what1##i.ccode if issue==1, cluster(id)
	margins i.what1, at(ccode=2) vsquish post
	estimates store pun1ger1
quietly reg pun2 i.what1##i.ccode if issue==1, cluster(id)
	margins i.what1, at(ccode=3) vsquish post
	estimates store pun1tur1	
quietly reg pun2 i.what1##i.ccode if issue==2, cluster(id)
	margins i.what1, at(ccode=1) vsquish post	
	estimates store pun1rus2
quietly reg pun2 i.what1##i.ccode if issue==2, cluster(id)
	margins i.what1, at(ccode=2) vsquish post	
	estimates store pun1ger2
quietly reg pun2 i.what1##i.ccode if issue==2, cluster(id)
	margins i.what1, at(ccode=3) vsquish post	
	estimates store pun1tur2	
				  

coefplot pun1rus1, title("Russia") ///
	     mlabposition(2) mlabcol(black) name(d2a, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///
		 fxsize(150) ///
		 mlabel(cond(@b<57, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
					  
coefplot pun1ger1, title("Germany") ///
	     mlabposition(2) mlabcol(black) name(d2b, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(90) ///
		 mlabel(cond(@b<47, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<25, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun1tur1, title("Turkey") ///
		 mlabposition(2) mlabcol(black) name(d2c, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(90) ///
		 mlabel(cond(@b<43, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
				
graph combine d2a d2b d2c, xcommon ycommon rows(1) fysize(100) ///
	  b1title("Support for Diplomatic Cut-off (%)", size(small)) ///
	  title("Election Interference Scenario", size(medium)) name(f2, replace)
					  
coefplot pun1rus2, title("Russia") ///
	     mlabposition(2) mlabcol(black) name(d3a, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
	     ylabel(1 `""Recent Whataboutism" "Admission of Guilt""' ///
				2 `""Recent Whataboutism" "Democracy or" "Wider Context"' ///
				3  `""Recent Whataboutism" "Dismissal""' ///
				4 `""Recent Whataboutism" "No Response""' ///
				5 "Denial" ///
				6 "No Comment", labcol(black)) ///
		 fxsize(150) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
					  
coefplot pun1ger2, title("Germany") ///
	     mlabposition(2) mlabcol(black) name(d3b, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(85) ///
		 mlabel(cond(@b<45, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<25, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))

coefplot pun1tur2, title("Turkey") ///
		 mlabposition(2) mlabcol(black) name(d3c, replace)  ///
	     ciopts(recast(rcap)) format(%9.0f) scheme(plottig) ///
	     xtitle("") rescale(100) ///
		 ytitle("") ///
		 ylabel("") fxsize(85) ///
		 mlabel(cond(@b<40, string(@b, "%9.0fc") + "*", ///
				cond(@b<20, string(@b, "%9.0fc") + "**", ///
				cond(@b<30, string(@b, "%9.0fc") + "***", string(@b, "%9.0fc")))))
				
graph combine d3a d3b d3c, xcommon ycommon rows(1) fysize(100) ///
	  b1title("Support for Diplomatic Cut-off (%)", size(small)) ///
	  title("Refugee Crisis Scenario", size(medium)) name(f3, replace)

graph combine f1 f2 f3, rows(3) scale(1) ysize(8.5) xsize(5.5) ///
	  l1title("Responses by Target of Criticism", size(small))

			  
// For Appendix A7 through A8, see R script
	
